Typically in a large software development project, many programmers or programming groups work in conjunction with one another to develop a single piece of software. Moreover, in today's distributed environment, using local area networks (LAN) as well as wide area networks (WAN), these various programmers and programming groups may be spread around the world.
In the past, source code management software has been developed to provide an efficient means for coordinating and documenting the programming activities of such a development group. Early versions of these systems were the Source Code Control System (SCCS), and the Revision Control System (RCS). Other systems are described in detail in U.S. Pat. No. 5,481,722 issued Jan. 2, 1996 titled “Method and Apparatus for Merging Change Control Delta Structure Files of a Source Module from a Parent and a Child Development Environment”; in U.S. Pat. No. 4,912,637 issued Mar. 27, 1990 titled “Version Management Tool”; and in U.S. Pat. No. 4,558,413 issued Dec. 10, 1985 titled “Software Version Management System.” The systems described in these patents focused primarily on the version control problem in the context of relatively small programs and system usage in relatively small local development groups.
In today's hectic technology environment, software developers rush to get original product releases to market, followed by the inevitable “bug-fix” revisions, new feature releases, and extensive upgrades in a never ending cycle. Extensive use of Object Oriented Programming (OOP) techniques have added several levels of complexity to the configuration management task. Some large hardware companies, whose products sales are dependent on related software supporting new hardware features, add an additional pressure on software developers to rapidly modify existing software and produce releases of the operating system containing support for the new hardware features. Such shorter release cycles increase the need for development groups to engage in parallel development. However dividing project efforts among multiple developers or teams can lead to problems with software integration, reoccurring bugs, and lost changes. The requirement to maintain control of the source code in all of these releases amid continuing development is even more critical than in the past. In addition, such an environment of complex software, multiple platforms, globally dispersed development groups has required software configuration management systems which have process management functions embedded within the software configuration management tools. Process management functions are needed which include configuration control, version control, and also control of the procedures for sophisticated build/release functions, web object management functions and development and deployment functions.
Moreover, to satisfy the differing requirements of different customers in the exploding telecommunications market, it is required for manufacturers of network switches and routers as well as other devices to offer different operating system images containing different platform specific capabilities as well as different non-platform-specific features and protocols. Businesses which manage Internet and Intranet networks are constantly seeking less expensive equipment such as switches, routers, servers and client terminals. Such demands for less expensive equipment drives manufacturers to constantly create new and more desirable platforms. At the same time many of these businesses are simultaneously seeking new features which are platform independent to accommodate the exploding demands of their customers. Such demands included desires for more bandwidth, faster transmission protocols, more content security features such as cryptographic protocols, etc., etc. At the same time these businesses do not desire to pay for features which they do not need or want if at all possible. To accommodate such requirements, systems manufacturers develop “products” which contain separate combinations of such non-platform-specific features, which sell for various prices and which users can select for their particular platforms.
Such demands for new hardware platforms and new telecommunications features have led telecommunications systems suppliers such as Cisco Systems, Inc.™ (the assignee of the present invention) as well as others, to develop a sales strategy which dictates frequent releases of new hardware platforms and new feature software. This process places enormous pressure on the software developers to design, code and test new software to support the new hardware platforms and the new features, including protocols, and other special system features. All of these new software capabilities must ultimately be folded into the common Internetworking Operating System (IOS) which runs on all of the applicants switches and routers.
The technical problem addressed by the current invention relates to this issue of how to control the frequent release of new images of an operating system which contains new code for new hardware platforms, for various combinations of non-hardware-specific new features, while at the same time incorporating bug-fixes, and maintaining the highest quality of software possible through rigorously controlled testing, commit procedures and version management.
Some manufacturers of telecommunications devices have handled the problem of new feature control by putting all features possible in devices with infrequent releases and with mechanisms for cryptographically determining which features a customer is authorized to use. Such a system is described in U.S. Pat. No. 5,499,295 issued Mar. 12, 1996 Titled “Method and Apparatus for feature Authorization and Software Copy Protection in RF Communications devices.” However, such a system does not support an environment where new and less expensive hardware becomes available continuously and wherein new features are developed continuously. The business problem of capitalizing on the frequency of these new platforms and features requires a frequency of new supporting software releases never seen before.
There is a need in the art for a method and system for orderly release of new versions of software frequently (as often as every 8 weeks), wherein the new versions contain code of the highest quality for a multiplicity of hardware platforms and a multiplicity of non-platform specific new features.